﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;
using System.Reflection;
using Shell32;

namespace CheckDB
{
    public partial class frmCheckDB : Form
    {
        private AcctionCheckBLL ActionBLL = new AcctionCheckBLL();
        private AcctionCheckDAL ActionDAL = new AcctionCheckDAL();
        private DirectoryInfo di = new DirectoryInfo(@"ProgramFile\");
        private static string FileName = "";

        public frmCheckDB()
        {
            //MessageBox.Show(this, "Trước khi cập nhật hãy tắt chương trình Vietkins và VietEs\n Để được cập nhật tốt hơn!", "Thông báo", MessageBoxButtons.OK,
            //    MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            InitializeComponent();
        }

        public static void WriteResourceToFile(string resourceName, string fileName)
        {
            try
            {
                using (Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
                {
                    if (s != null)
                    {
                        byte[] buffer = new byte[s.Length];
                        char[] sb = new char[s.Length];
                        s.Read(buffer, 0, (int)(s.Length));
                        /* convert the byte into ASCII text */
                        for (int i = 0; i <= buffer.Length - 1; i++)
                        {
                            sb[i] = (char)buffer[i];
                        }
                        using (StreamWriter sw = new StreamWriter(fileName))
                        {
                            sw.Write(sb);
                            sw.Flush();
                        }
                    }
                }
            }
            catch { }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            linkLabel1.Visible = false;
            if(ActionBLL.CheckProcess(rbtVietkins.Checked))
            {
                return;
            }
            if (ActionBLL.GetShortcutFile(rbtVietkins.Checked))
            {
                return;
            }
            if (ActionBLL.SetPath(rbtVietkins.Checked))
                return;
            CheckData(sender, e);
            ActionBLL.GetConnectionString();
            Process(0, 150);
            if (ActionBLL.ExpandFolder(di.FullName, FileName))
                return;
            Process(150, 320);
            if (ActionBLL.ShowMessage("Bạn có muốn sao lưu lại dữ liệu trước khi cập nhật phiên bản mới nhất?", "Sao lưu") == DialogResult.Yes)
            {
                if (ActionBLL.BackUp(rbtVietkins.Checked))
                {
                    if (ActionBLL.ShowMessage("Không sao lưu được dữ liệu.\n Nếu tiếp tục cập nhật có thể mất dữ liệu cũ.\n Có tiếp tục không?", "Cảnh báo") == DialogResult.No)
                        return;
                }
            }
            Process(320, 580);
            ActionBLL.CopyTo(rbtVietkins.Checked);
            Process(580, 620);
            ActionDAL.GetTablesTo();
            Process(620, 700);
            ActionDAL.CheckAndAddTable();
            Process(700, 810);
            ActionDAL.CheckAndAddColumn();
            Process(810, 980);
            ActionDAL.AddView();
            Process(980, 1000);
            Complete();
        }

        private void rbtVietkins_Click(object sender, EventArgs e)
        {
            rbtVietkins.Checked = true;
            rbtVietEs.Checked = false;
        }

        private void rbtVietEs_Click(object sender, EventArgs e)
        {
            rbtVietkins.Checked = false;
            rbtVietEs.Checked = true;
        }

        private void Process(int a, int b)
        {
            for (int i = a; i < b; i++)
            {
                //Làm cái gi` đó
                this.progressBar1.PerformStep();
            }
        }

        public void CheckData(object sender, EventArgs e)
        {
            if (rbtVietkins.Checked)
            {
                ActionDAL = new AcctionCheckDAL();
                FileName = "Vietkins.zip";
            }
            else
            {
                ActionDAL = new AcctionCheckDAL(true);
                FileName = "VietEs.zip";
            }
            this.lbabc.Visible = true;
            this.progressBar1.Visible = true;
            this.progressBar1.Maximum = 1000;
            this.progressBar1.Minimum = 0;
            this.progressBar1.Step = 1;
            this.button3.Enabled = false;
        }

        public void Complete()
        {
            this.progressBar1.Value = 0;
            this.progressBar1.Visible = false;
            this.lbabc.Visible = false;
            button3.Enabled = true;
            this.linkLabel1.Visible = true;
            ActionDAL.DisplayView();
            FileName = null;
            ActionBLL.Complete();
            MessageBox.Show("Đã thao tác xong.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            button3.Enabled = false;
            Cursor.Current = Cursors.WaitCursor; 
            frmListMyProgram frmMyProgram = new frmListMyProgram(rbtVietkins.Checked);
            Cursor.Current = Cursors.Default;
            frmMyProgram.ShowDialog();
            button3.Enabled = true;
        }
    }
}
